Day 9: Meta Llama 시리즈
Meta(구 Facebook)의 Llama는 오픈소스 LLM의 판도를 바꾼 모델입니다. 누구나 무료로 다운로드하여 연구하고, 수정하고, 심지어 상업적으로 사용할 수 있습니다.
Llama 모델 변천사
아래 표는 대표 버전 흐름을 이해하기 위한 요약입니다. 최신 세부 스펙(컨텍스트/라이선스/권장 사용)은 모델 카드와 공식 문서를 우선 확인하세요.
| 모델 | 크기 | 학습 토큰 | 컨텍스트 | 라이선스 |
|---|---|---|---|---|
| Llama 2 | 7B / 13B / 70B | 2T | 4K | Llama 2 Community |
| Llama 3 | 8B / 70B | 15T | 8K | Llama 3 Community |
| Llama 3.1 | 8B / 70B / 405B | 15T+ | 128K | Llama 3.1 Community |
| Llama 3.2 | 1B / 3B / 11B / 90B | — | 128K | Llama 3.2 Community |
주목할 점: Llama 3는 Llama 2보다 학습 토큰이 7배 이상 많습니다. Chinchilla 법칙을 훨씬 초과하여 작은 모델의 성능을 끌어올린 전략입니다.
Ollama로 로컬 실행
Ollama는 로컬에서 LLM을 가장 쉽게 실행하는 도구입니다.
# 1단계: Ollama 설치 (https://ollama.ai)
# 2단계: 터미널에서 모델 다운로드
# ollama pull llama3.1:8b
# ollama pull llama3.1:70b (VRAM 40GB+ 필요)
# 3단계: Python에서 사용
# pip install ollama
import ollama
response = ollama.chat(
model="llama3.1:8b",
messages=[
{"role": "system", "content": "한국어로 답해주세요."},
{"role": "user", "content": "퀵소트 알고리즘을 설명해주세요."},
],
)
print(response["message"]["content"])
HuggingFace에서 다운로드
# pip install transformers torch accelerate
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
model_name = "meta-llama/Meta-Llama-3.1-8B-Instruct"
# HuggingFace 토큰 필요 (https://huggingface.co/settings/tokens)
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype=torch.float16, # 메모리 절약 (16비트)
device_map="auto", # GPU 자동 배치
)
# Llama 3 대화 형식
messages = [
{"role": "system", "content": "You are a helpful assistant. 한국어로 답해주세요."},
{"role": "user", "content": "재귀 함수를 설명해주세요."},
]
input_ids = tokenizer.apply_chat_template(
messages, return_tensors="pt"
).to(model.device)
output = model.generate(input_ids, max_new_tokens=256, temperature=0.7)
response = tokenizer.decode(output[0][input_ids.shape[-1]:], skip_special_tokens=True)
print(response)
Ollama REST API 활용
import requests
import json
# Ollama는 기본적으로 localhost:11434에서 실행
def query_ollama(prompt, model="llama3.1:8b"):
response = requests.post(
"http://localhost:11434/api/generate",
json={
"model": model,
"prompt": prompt,
"stream": False,
"options": {
"temperature": 0.7,
"num_predict": 256,
},
},
)
return response.json()["response"]
# OpenAI 호환 API도 지원
def query_ollama_openai_compat(prompt, model="llama3.1:8b"):
response = requests.post(
"http://localhost:11434/v1/chat/completions",
json={
"model": model,
"messages": [{"role": "user", "content": prompt}],
},
)
return response.json()["choices"][0]["message"]["content"]
result = query_ollama("파이썬에서 리스트와 튜플의 차이는?")
print(result)
로컬 실행 시 하드웨어 요구사항
| 모델 크기 | VRAM 필요량 (FP16) | VRAM 필요량 (4bit) | 추천 GPU |
|---|---|---|---|
| 1B~3B | 2~6 GB | 1~2 GB | 내장 GPU 가능 |
| 8B | 16 GB | 5 GB | RTX 3060 이상 |
| 70B | 140 GB | 35~40 GB | A100 80GB 또는 멀티 GPU |
| 405B | 810 GB | 200+ GB | 클러스터 필요 |
4bit 양자화(Quantization)를 사용하면 VRAM을 약 1/4로 줄일 수 있습니다.
오늘의 연습문제
- Ollama를 설치하고
llama3.1:8b모델을 다운로드하여 한국어로 대화해보세요. 응답 속도와 한국어 품질을 기록하세요. - 같은 질문을
llama3.1:8b와 상용 경량 API 모델(최신)을 각각 보내고 응답 품질을 비교해보세요. 로컬 모델의 장단점은 무엇인가요? - Llama 3의 라이선스를 읽고, 상업적 사용에 어떤 제한이 있는지 정리해보세요. (월간 활성 사용자 7억 명 조항)